// app.js
import { login } from './api/user';
App({
  globalData: {
    userInfo: null,
    isAuthorized: false,
    env: "",
    nfcSupported: false,
    nfcDevice: null,
    nfcListener: null
  },

  onLaunch: function () {
    this.globalData = {
      userInfo: null,
      isAuthorized: true,
      // env 参数说明：
      //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
      //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
      //   如不填则使用默认环境（第一个创建的环境）
      env: "",
      nfcSupported: false,
      nfcDevice: null,
      nfcListener: null
    };

    if (!wx.cloud) {
      console.error("请使用 2.2.3 或以上的基础库以使用云能力");
    } else {
      wx.cloud.init({
        env: this.globalData.env,
        traceUser: true,
      });
    }

    // 检查本地存储的用户信息
    this.checkUserAuth();

    // 初始化NFC功能
    this.initNFC();
  },

  // 检查用户授权状态
  checkUserAuth: function () {
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.globalData.userInfo = userInfo;
      this.globalData.isAuthorized = true;
      return
    }
    // 自动登录获取code
    this.wxLogin();
  },

  // 绑定微信用户 并返回token
  reqLogin: async function (code) {
    const res = await login({ code })
  },

  // 微信登录获取code
  wxLogin: function () {
    wx.login({
      success: (res) => {
        if (res.code) {
          console.log('获取到登录code:', res.code);
          // this.reqLogin(res.code)
          // 这里可以将code发送给后端
          // this.sendCodeToBackend(res.code);
        } else {
          console.error('登录失败:', res.errMsg);
        }
      },
      fail: (err) => {
        console.error('wx.login失败:', err);
      }
    });
  },

  // 用户授权登录
  userLogin: function () {
    return new Promise((resolve, reject) => {
      wx.getUserProfile({
        desc: '用于完善用户资料',
        success: (res) => {
          const userInfo = res.userInfo;
          // 存储用户信息到本地
          wx.setStorageSync('userInfo', userInfo);
          this.globalData.userInfo = userInfo;
          this.globalData.isAuthorized = true;

          // 获取登录code
          this.wxLogin();

          resolve(userInfo);
        },
        fail: (err) => {
          console.error('获取用户信息失败:', err);
          reject(err);
        }
      });
    });
  },

  // 退出登录
  logout: function () {
    wx.removeStorageSync('userInfo');
    this.globalData.userInfo = null;
    this.globalData.isAuthorized = false;
  },

  // 初始化NFC功能
  initNFC: function () {
    // 检查是否支持NFC
    if (typeof wx.getNFCAdapter === 'function') {
      try {
        const nfcAdapter = wx.getNFCAdapter();
        if (nfcAdapter) {
          this.globalData.nfcSupported = true;
          console.log('NFC功能已初始化');

          // 监听NFC设备发现
          this.startNFCListener();
        } else {
          console.log('NFC适配器不可用');
          this.globalData.nfcSupported = false;
        }
      } catch (error) {
        console.error('NFC初始化失败:', error);
        this.globalData.nfcSupported = false;
      }
    } else {
      console.log('当前设备不支持NFC功能');
      this.globalData.nfcSupported = false;
    }
  },

  // 开始监听NFC设备
  startNFCListener: function () {
    if (!this.globalData.nfcSupported) {
      return;
    }

    try {
      const nfcAdapter = wx.getNFCAdapter();

      // 监听NFC设备发现
      nfcAdapter.onDiscovered((res) => {
        console.log('发现NFC设备:', res);
        this.handleNFCDevice(res);
      });

      // 开始监听
      nfcAdapter.startDiscovery({
        success: (res) => {
          console.log('NFC监听启动成功:', res);
        },
        fail: (err) => {
          console.error('NFC监听启动失败:', err);
        }
      });

      this.globalData.nfcListener = nfcAdapter;
    } catch (error) {
      console.error('启动NFC监听失败:', error);
    }
  },

  // 处理NFC设备发现
  handleNFCDevice: function (nfcData) {
    const deviceInfo = this.parseNFCDevice(nfcData);
    this.globalData.nfcDevice = deviceInfo;

    // 显示NFC设备弹窗
    this.showNFCModal(deviceInfo);
  },

  // 处理NFC设备丢失（当设备移开时）
  handleNFCLost: function () {
    this.globalData.nfcDevice = null;
    console.log('NFC设备已断开连接');
  },

  // 解析NFC设备信息
  parseNFCDevice: function (nfcData) {
    const deviceInfo = {
      id: nfcData.id || '未知',
      type: nfcData.type || '未知',
      name: nfcData.name || '未知设备',
      manufacturer: nfcData.manufacturer || '未知厂商',
      model: nfcData.model || '未知型号',
      serialNumber: nfcData.serialNumber || '未知序列号',
      timestamp: new Date().toLocaleString(),
      rawData: nfcData
    };

    // 根据设备类型设置友好名称
    if (nfcData.type) {
      switch (nfcData.type.toLowerCase()) {
        case 'nfc-a':
          deviceInfo.friendlyType = 'NFC-A (ISO14443A)';
          break;
        case 'nfc-b':
          deviceInfo.friendlyType = 'NFC-B (ISO14443B)';
          break;
        case 'nfc-f':
          deviceInfo.friendlyType = 'NFC-F (FeliCa)';
          break;
        case 'nfc-v':
          deviceInfo.friendlyType = 'NFC-V (ISO15693)';
          break;
        default:
          deviceInfo.friendlyType = nfcData.type;
      }
    }

    return deviceInfo;
  },

  // 显示NFC设备弹窗
  showNFCModal: function (deviceInfo) {
    // 触发全局事件，让当前页面显示NFC弹窗
    if (this.globalData.currentPage && this.globalData.currentPage.showNFCDevice) {
      this.globalData.currentPage.showNFCDevice(deviceInfo);
    } else {
      // 如果没有当前页面，使用默认弹窗
      this.showDefaultNFCModal(deviceInfo);
    }
  },

  // 默认NFC弹窗
  showDefaultNFCModal: function (deviceInfo) {
    wx.showModal({
      title: '发现NFC设备',
      content: `设备名称：${deviceInfo.name}\n设备类型：${deviceInfo.friendlyType}\n厂商：${deviceInfo.manufacturer}\n序列号：${deviceInfo.serialNumber}`,
      showCancel: false,
      confirmText: '确定'
    });
  },

  // 停止NFC监听
  stopNFCListener: function () {
    if (this.globalData.nfcListener) {
      try {
        this.globalData.nfcListener.stopDiscovery({
          success: (res) => {
            console.log('NFC监听已停止:', res);
          },
          fail: (err) => {
            console.error('停止NFC监听失败:', err);
          }
        });
        this.globalData.nfcListener = null;
      } catch (error) {
        console.error('停止NFC监听出错:', error);
      }
    }
  },

  onHide: function () {
    // 小程序隐藏时停止NFC监听
    this.stopNFCListener();
  },

  onUnload: function () {
    // 小程序卸载时停止NFC监听
    this.stopNFCListener();
  }
});
